package com.xianggu.reflect.demo;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Method;

public class SecretService {
    private void secretAction(String code) {
        System.out.println("执行机密操作：" + code);
    }

    //调用私有方法
    public static void main(String[] args) throws Throwable {
        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodType mt = MethodType.methodType(void.class, String.class);
        
        // 反射获取私有方法后转换为 MethodHandle
        Method m = SecretService.class.getDeclaredMethod("secretAction", String.class);
        m.setAccessible(true);
        MethodHandle pmh = lookup.unreflect(m);  // 解除私有限制
        
        // 调用
        SecretService service = new SecretService();
        pmh.invokeExact(service, "TOP_SECRET"); // 输出：执行机密操作：TOP_SECRET
    }
}